import { getPluginsList } from "./build/plugins";
import { include, exclude } from "./build/optimize";
import { type UserConfigExport, type ConfigEnv, loadEnv } from "vite";
import {
  root,
  alias,
  wrapperEnv,
  pathResolve,
  __APP_INFO__
} from "./build/utils";

export default ({ mode }: ConfigEnv): UserConfigExport => {
  const { VITE_CDN, VITE_PORT, VITE_COMPRESSION, VITE_PUBLIC_PATH } =
    wrapperEnv(loadEnv(mode, root));
  return {
    base: VITE_PUBLIC_PATH,
    root,
    resolve: {
      alias
    },
    // 服务端渲染
    server: {
      // 端口号
      port: VITE_PORT,
      host: "0.0.0.0",
      // 本地跨域代理 https://cn.vitejs.dev/config/server-options.html#server-proxy
      proxy: {
        "/api": {
          // 这里填写后端地址
          target: "http://127.0.0.1:8080",
          changeOrigin: true,
          // rewrite: path => path.replace(/^\/api/, "")
          rewrite: path => path.replace(/^\/api/, "")
        }
      },
      // 预热文件以提前转换和缓存结果，降低启动期间的初始页面加载时长并防止转换瀑布
      warmup: {
        clientFiles: ["./index.html", "./src/{views,components}/*"]
      }
    },
    plugins: getPluginsList(VITE_CDN, VITE_COMPRESSION),
    // https://cn.vitejs.dev/config/dep-optimization-options.html#dep-optimization-options
    optimizeDeps: {
      include,
      exclude
    },
    build: {
      // https://cn.vitejs.dev/guide/build.html#browser-compatibility
      target: "es2015",
      sourcemap: false,
      // 消除打包大小超过500kb警告
      chunkSizeWarningLimit: 4000,
      rollupOptions: {
        input: {
          index: pathResolve("./index.html", import.meta.url)
        },
        // 静态资源分类打包
        output: {
          chunkFileNames: "static/js/[name]-[hash].js",
          entryFileNames: "static/js/[name]-[hash].js",
          assetFileNames: "static/[ext]/[name]-[hash].[ext]"
        }
      }
    },
    define: {
      __INTLIFY_PROD_DEVTOOLS__: false,
      __APP_INFO__: JSON.stringify(__APP_INFO__)
    }
  };
};
// import { defineConfig, loadEnv, ConfigEnv, UserConfigExport } from "vite";  // 确保导入 loadEnv
// import vue from "@vitejs/plugin-vue";
// import { viteMockServe } from "vite-plugin-mock";
// import { getPluginsList } from "./build/plugins";
// import { include, exclude } from "./build/optimize";
// import {
//   root,
//   alias,
//   wrapperEnv,
//   pathResolve,
//   __APP_INFO__
// } from "./build/utils";

// export default ({ mode }: ConfigEnv): UserConfigExport => {
//   const { VITE_CDN, VITE_PORT, VITE_COMPRESSION, VITE_PUBLIC_PATH } =
//     wrapperEnv(loadEnv(mode, root)); // 确保正确使用 loadEnv

//   return {
//     base: VITE_PUBLIC_PATH,
//     root,
//     resolve: {
//       alias
//     },
//     server: {
//       port: VITE_PORT,
//       host: "0.0.0.0",
//       proxy: {
//         "/api": {
//           target: "http://127.0.0.1:8081", // 后端地址
//           changeOrigin: true,
//           rewrite: path => path.replace(/^\/api/, "")
//         }
//       },
//       warmup: {
//         clientFiles: ["./index.html", "./src/{views,components}/*"]
//       }
//     },
//     plugins: [
//       ...getPluginsList(VITE_CDN, VITE_COMPRESSION),
//       viteMockServe({
//         mockPath: "mock", // Mock 文件存放目录
//         enable: true, // 启用 Mock
//         logger: true // 是否在控制台显示请求日志
//       })
//     ],
//     optimizeDeps: {
//       include,
//       exclude
//     },
//     build: {
//       target: "es2015",
//       sourcemap: false,
//       chunkSizeWarningLimit: 4000,
//       rollupOptions: {
//         input: {
//           index: pathResolve("./index.html", import.meta.url)
//         },
//         output: {
//           chunkFileNames: "static/js/[name]-[hash].js",
//           entryFileNames: "static/js/[name]-[hash].js",
//           assetFileNames: "static/[ext]/[name]-[hash].[ext]"
//         }
//       }
//     },
//     define: {
//       __INTLIFY_PROD_DEVTOOLS__: false,
//       __APP_INFO__: JSON.stringify(__APP_INFO__)
//     }
//   };
// };
